خرید بک لینک
اگر برنامههای مبتنی بر SQL Server خود را به EF 7.0 ارتقاء دهید، در حین اجرای برنامه، به خطای زیر برخواهید خورد: A coection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.) علت اینجا است که پروایدر SQL Server مخصوص EF 7.0، از نگارش جدید Microsoft.Data.SqlClient استفاده میکند و در این نگارش، تنظیم Encrypt=True، به صورت پیشفرض اعمال شدهاست. این تنظیم، پیشتر به صورت Encrypt=False وجود داشت و به همین جهت عموما در حین تعریف رشتههای اتصالی دیده نمیشد. اگر نیاز به استفادهی از پرچم Encrypt=True وجود داشته باشد: - باید سرور اس کیوال با یک certificate معتبر تنظیم شود. - کلاینت باید این certificate را تائید کند. اگر کلاینت چنین قصدی را ندارد، میتواند تنظیم TrustServerCertificate=True را به رشتهی اتصالی اضافه کند. در غیراینصورت، خطای ذکر شده را دریافت خواهیم کرد. برای رفع این مشکل یا باید رمزنگاری اتصالات را در SQL Server پیاده سازی کرد و یا از این پس، ذکر پرچم Encrypt=False در انتهای رشتهی اتصالی به آن، ضروری است. برای مثال یک نمونه رشتهی اتصالی تغییر یافتهی بر اساس این تنظیم، به صورت زیر است: Data Source=.SQLEXPRESS;Initial Catalog=MyTestDb;Integrated Security=true;Encrypt=False; بدیهی است این تغییر مختص به EF 7.0 نیست و تمام برنامههایی که از ADO.NET و نگارش جدید Microsoft.Data.SqlClient استفاده میکنند، باید به آن توجه داشته باشند.

برچسب: نویسنده: دانلودی تاريخ: شنبه 26 آذر 1401 ساعت: 13:30

همواره حذف و به روز رسانی تعداد زیادی رکورد توسط EF، بسیار غیربهینه و کند بودهاست؛ از این جهت که یکی از روشهای انجام اینکار، کوئری گرفتن از رکوردهای مدنظر جهت حذف، سپس بارگذاری آنها در حافظه و در آخر حذف یکی یکی آنها بودهاست: using var dbContext = new MyDbContext(); var objectToDelete = await dbContext.Objects.FirstAsync(o => o.Id == id); dbContext.Objects.Remove(objectToDelete); await dbContext.SaveChangesAsync(); در اینجا در ابتدا، شیءای که قرار است حذف شود، از بانک اطلاعاتی کوئری گرفته میشود تا وارد سیستم Change Tracking شود. سپس از این سیستم ردیابی اطلاعات درون حافظهای، حذف خواهد شد و در نهایت این تغییرات به بانک اطلاعاتی اعمال میشوند. بنابراین در این مثال ساده، حداقل دوبار رفت و برگشت به بانک اطلاعاتی وجود خواهد داشت. البته راه دومی نیز برای انجام اینکار وجود دارد: using var dbContext = new MyDbContext(); var objectToDelete = new MyObject { Id = id }; dbContext.Objects.Remove(objectToDelete); await dbContext.SaveChangesAsync(); در این مثال، رفت و برگشت ابتدایی، حذف شدهاست و با فرض معلوم بودن کلید اصلی رکورد مدنظر، آنرا وارد سیستم Change Tracking کرده و درنهایت آنرا حذف میکنیم. کار متد Remove در اینجا، علامتگذاری این شیء دارای Id، به صورت EntityState.Deleted است. اکنون میتوان در EF 7.0، روش سومی را نیز به این لیست اضافه کرد که فقط یکبار رفت و برگشت به بانک اطلاعاتی را سبب میشود: await dbContext.Objects.Where(x => x.Id == id).ExecuteDeleteAsync(); معرفی متدهای حذف و بهروز رسانی دستهای رکوردها در EF 7.0 EF 7.0 به همراه دو متد جدید Exe

برچسب: نویسنده: دانلودی تاريخ: شنبه 26 آذر 1401 ساعت: 13:30

فرض کنید میخواهید برای یک پروژه، امکانی را درنظر بگیرید که بتوان برای تمامی رکوردهای موجودیتهای (Entity) آن پروژه، زمان ساخته شدن و به روزرسانی، به صورت خودکار ثبت شود.کار با تعریف یک کلاس پایه به شکل زیر شروع میشود: public class BaseEntity { public DateTimeOffset CreatedDate { get; set; } public DateTimeOffset UpdatedDate { get; set; } } سپس برای اینکه کار مقداردهی، به صورت خودکار انجام گیرد، باید متدهای SaveChanges و SaveChangesAsync به شکل زیر در ApplicationDbContext پروژه override شوند: //override because we need add created and updated date to some entities public override async Task<int> SaveChangesAsync( CancellationToken cancellationToken = default(CancellationToken)) { AddCreatedUpdatedDate(); retu (await base.SaveChangesAsync(true, cancellationToken)); } //override because we need add created and updated date to some entities public override int SaveChanges() { AddCreatedUpdatedDate(); retu base.SaveChanges(); } تابع AddCreatedUpdatedDate نیز به شکل زیر تعریف خواهد شد: /// <summary> /// Add created and updated date to any entities that /// inherit from BaseEntity class /// </summary> public void AddCreatedUpdatedDate() { var entries = ChangeTracker .Entries() .Where(e => e.Entity is BaseEntity && (

برچسب: نویسنده: دانلودی تاريخ: سه شنبه 22 آذر 1401 ساعت: 20:06

غنیسازی پاورشل PowerShell توسط اپلیکیشنهای مختلفی مانند VS Code یا Console قابل میزبانی است. با کمک این اپلیکیشنها، دستورات به موتور PowerShell ارسال میشوند. این موتور است که دستورات را دریافت کرده و آنها را اجرا میکند و در نهایت خروجی، درون این اپلیکشنهای میزبان، نمایش داده خواهند شد. علاوه بر آن، یک اپلیکیشن میزبان، مسئولیت بارگذاری و اجرای اسکریپتها را با هربار اجرای شل، بر عهده دارد. درون این اسکریپتها، فرصت این را خواهیم داشت تا ماژولهای موردنیازمان را بارگذاری کنیم؛ دایرکتوری پیشفرض را تغییر دهیم، یکسری توابع را تعریف و یا فراخوانی کنیم. بنابراین این امکان را داریم تا موتور PowerShell را درون یک پراسس NET. میزبانی کنیم. در اینحالت باید خودمان Input/Output را هندل کنیم. به عنوان مثال میتوانیم Error streams را درون یک Message Box نمایش دهیم، یا اینکه Information streams را درون یکسری RichText Box نمایش دهیم. در اینجا میتوانید مراحل پیادهسازی یک نمونه Host سفارشی را مشاهده کنید.  برای مشاهدهی مشخصات اپلیکیشن میزبان میتوانید از دستور Get-Host یا از متغیر خودکار host$ نیز استفاده کنید:  PS /> Get-Host Name : ConsoleHost Version : 7.3.0 InstanceId : c3f625f0-dad8-4325-a0a1-f6499afecb8a UI : System.Management.Automation.Inteal.Host.IntealHostUserInte rface CurrentCulture : en-GB CurrentUICulture : en-GB PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runs

برچسب: نویسنده: دانلودی تاريخ: شنبه 19 آذر 1401 ساعت: 20:43

به C# 11، عملگر جدیدی به شکل <<< و به معنای unsigned right shift اضافه شدهاست که ... در زبان جاوا از نگارش ابتدایی آن حضور داشتهاست. اما ... چرا از این لحاظ بین این دو زبان، تفاوت وجود داشتهاست؟ مفهوم عملگر شیفت در #C عملگر شیفت به سمت راست و یا <<، عددی را به تعداد بیت مشخص شده (x >> count)، به سمت راست منتقل میکند و دو نوع دارد: الف) شیفت به راست منطقی برای مثال اگر عدد 12 را به صورت باینری نمایش دهیم، به صورت زیر خواهد بود: 00000000 00000000 00000000 00001100 و اگر آنرا به اندازهی یک بیت به سمت راست هدایت کنیم، که با 1 <<< 12  نمایش داده میشود: 00000000 00000000 00000000 00000110 به عدد 6 خواهیم رسید. در این حالت همواره فرض میشود که عدد مدنظر، unsigned است. ب) شیفت به راست ریاضی شیفت به راست ریاضی، دقیقا مانند شیفت به راست منطقی است؛ مانند مثال زیر که عدد 1001  باینری را دو بیت به سمت راست منتقل میکند: uint e = 0b_1001; Console.WriteLine($"Before: {Convert.ToString(e, toBase: 2),4}"); // Before: 1001 uint f = e >> 2; Console.WriteLine($"After: {Convert.ToString(f, toBase: 2).PadLeft(4, '0'),4}"); // After: 0010 اما ... بجای اینکه همانند شیفت به راست منطقی، سمت چپ را با صفر پر کند، آنرا با «با ارزشترین بیت یا همان بیت علامت» پر میکند. یعنی در اینجا بیتی که بیانگر مثبت و منفی بودن عدد است، حفظ میشود. یعنی این نوع شیفت، با اعداد signed هم کار میکند. برای مثال نمایش باینری عدد منفی 2,147,483,552-  به صورت زیر است: 10000000 00000000 00000000 01100000

برچسب: نویسنده: دانلودی تاريخ: دوشنبه 14 آذر 1401 ساعت: 11:48

در C# 11، افزونهای به switch expressionها اضافه شدهاست که امکان بررسی توالی مقادیر آرایهها و مجموعهها را نیز میدهد که به آن list expressions هم میگویند. List Pattes امکان بررسی شکل یک لیست و یا آرایه را ممکن میکنند. برای مثال اگر نیاز است بررسی کنیم که آیا مجموعهای با یک مقدار خاص، شروع میشود، پایان مییابد و یا حاوی آن است، List Pattes مفید واقع خواهند شد. در اینجا List Pattes، با [] مشخص میشوند و در بین []ها، توالی مقادیری را که قرار است با اعضای مجموعهی مشخص شده، انطباق داده شوند، مشخص میکنیم. این افزونه به همراه ویژگی slice patte نیز هست که امکان انطباق با صفر و یا چند المان یک مجموعه را میسر میکند. در این حالت از دو نقطه برای نمایش آن در بین []ها استفاده میشود. برای مثال الگوی زیر: [1, 2, .., 10] با تمام آرایههای زیر انطباق دارد: int[] arr1 = { 1, 2, 10 }; int[] arr2 = { 1, 2, 5, 10 }; int[] arr3 = { 1, 2, 5, 6, 7, 8, 9, 10 }; بررسی چند مثال جهت آشنایی با مفهوم List Pattes ابتدا مجموعهی زیر را در نظر بگیرید: int[] collection = { 1, 2, 3, 4 }; الف) روش انطباق با یک توالی مشخص Console.WriteLine(collection is [1, 2, 3, 4]); // True Console.WriteLine(collection is [1, 2, 4]); // False توالی مشخص شدهی در الگوی اول، دقیقا با توالی عناصر آرایه انطباق دارد. اما در حالت دوم، چون توالی اعداد الگوی مشخص شده، با توالی اعداد آرایه یکی نیست، انطباقی رخ ندادهاست. ب) امکان استفاده از discard و همچنین لیستی از عناصر Console.WriteLine(collection is [_, 2, _, 4]); // True Console.WriteLine(collection is [.., 3, _]); // True - اگر نیاز به صرفن

برچسب: نویسنده: دانلودی تاريخ: سه شنبه 1 آذر 1401 ساعت: 14:53

صفحه بندی

خبرنامه